//app.js  abc
var wx_path = wx.env.USER_DATA_PATH;
var upyunDomain = 'http://tp-shop-img.bm123.xyz';

var OpenCityName = 'city_open';
var DomainListName = 'domain_list';
var GoodsTypeName = 'goods_type_list';
var StatusSetName = 'StatusSet';
var system_path = wx_path + '/Dir_System/';
var openid_info_path = system_path + 'openid';
App({
  globalData: {
    defaultImg: upyunDomain + '/7.jpg',
    upyunDomain: upyunDomain,     //upyun域名
    default_RequestPath:'/Zindex/interface.php',  //请求接口
    currentDomain:'',                      //当前使用的请求域名
    openCity:'',                        //已开通城市容器
    currentCity:'',                     //当前选择的城市信息

    //文件缓坡相关
    currentCityPath: '/currentCity',   //当前选择城市的文件缓存路径

  },


  onLaunch: function () {
    var t = this;


    //获取开通城市列表
    t._getOpenCity(function(res){
      t.globalData.openCity = res;
    },0)

    //获取域名列表
    t._getDomainList(function(res){
      //随机域名
      t._randomDomain(res.domainList,function(res){
        if(/^http.*/.test(res)){
          t.globalData.currentDomain = res;
        }
      },0)

    },0)
  },


  //随机域名
  _randomDomain(domainList, fun,v) {
    var currentDomain = '';
    if (domainList.length < 1) {
      if (fun) fun('err')
      return
    }
    var t = this;
    var tmpArr = [];
    for (var i = 0; i < domainList.length; i++) {
      tmpArr.push(domainList[i]);
    }
    _selectDomain(tmpArr,v);

    var tmpTime = 0;
    var si = setInterval(function () {
      if (/^http.*/.test(currentDomain)) {
        if (fun) fun(currentDomain);
        clearInterval(si);
      }
      if (tmpTime >= 5000) {
        clearInterval(si);
        wx.redirectTo({
          url: '/pages/error/error?t=50002',
        })
      }
      tmpTime += 500;
    }, 500)


    function _selectDomain(domains,v) {
      var index = Math.floor(Math.random() * domains.length);
      var domain = domains.splice(index, 1)[0];
      var url = domain + '/ping.php';
      t.Ajax({}, function (res) {
        if(v)t.C(url + ' is ' + (res=='abort'?'abort':res.data));
        if (res.data == 'ok') {
          currentDomain = domain;
        } else {
          if (domains.length > 0) {
            _selectDomain(domains);
          }
        }
      }, url, 'get', 1000)
    }
  },



  //获取域名列表
  _getDomainList(fun, v) {
    var t = this
    var cPath = '/domainList';
    var f = require('utils/files.js');
    f._has(cPath, function (res) {   //文件获取
      if (res == 'ok') {
        if (v) t.C('domainList from file');
        t.F(cPath, function (cache) {
          var cache2 = JSON.parse(cache)
          if (cache2.expire < new Date().getTime() - 5000) {  //过期了就进行版本比对
            if (v) t.C('domainList 过期了');
            t.Ajax({}, function (expires) {
              //if (cache2.tag == expires.data) {  //版本不一致则更新缓存
              if (cache2.tag != expires.data) {  //版本不一致则更新缓存
                if (v) t.C('domainList 版本不一致');
                _upyun(function (res) {    //upyun获取
                  if (fun) fun(res);
                }, v)
              } else {
                if (v) t.C('domainList 版本一致');  //版本一致则更新过期时间
                cache2.expire = new Date().getTime();
                t.F(cPath, JSON.stringify(cache2), function () { });
                if (fun) fun(cache2);
              }
            }, upyunDomain + '/cache/domainListTag');
          } else {
            if (v) t.C('domainList未过期');
            if (fun) fun(cache2);
          }
        })
      } else {
        _upyun(function (res) {    //upyun获取
          if (fun) fun(res);
        }, v)
      }
    })

    function _upyun(fun) {
      if (v) t.C('domainList from upyun');
      t.Ajax({}, function (res) {
        if (typeof (res.data.domainList) == 'object' && res.data.domainList.length > 0) {
          var domainList = res.data.domainList;
          var domainArr = [];
          for (var i = 0; i < domainList.length; i++) {
            domainArr.push(decodeURIComponent(domainList[i]));  //将域名中特殊字符转换
          }
          res.data.domainList = domainArr;
          res.data.expire = new Date().getTime();
          var str = JSON.stringify(res.data)
          t.F(cPath, str, function () { });
          if (fun) fun(res.data);
        } else {
          wx.redirectTo({
            url: '/pages/error/error?t=50001',
          })
        }
      }, upyunDomain + '/cache/domainList');
    }
  },





  





  //获取开通城市列表
  _getOpenCity(fun,v){
    var t = this
    var cPath = '/openCity';
    var f = require('utils/files.js');

    f._has(cPath, function (res) {   //文件获取
      if (res == 'ok') {
        if (v) t.C('openCity from file');
        t.F(cPath, function (cache) {
          var cache2 = JSON.parse(cache)
          if (cache2.expire < new Date().getTime() - 5000) {  //过期了就进行版本比对
            if (v) t.C('openCity 过期了');
            t.Ajax({}, function (expires) {
              //if (cache2.tag == expires.data) {  //版本不一致则更新缓存
              if (cache2.tag != expires.data) {  //版本不一致则更新缓存
                if (v) t.C('openCity 版本不一致');
                _upyun(function (res) {    //upyun获取
                  if (fun) fun(res);
                }, v)
              } else {
                if (v) t.C('openCity 版本一致');  //版本一致则更新过期时间
                cache2.expire = new Date().getTime();
                t.F(cPath, JSON.stringify(cache2), function () { });
              }
            }, upyunDomain + '/cache/openCityTag');
            if (fun) fun(cache2);
          } else {
            if (v) t.C('domainList未过期');
            if (fun) fun(cache2);
          }
        })
      } else {
        _upyun(function (res) {    //upyun获取
          if (fun) fun(res);
        }, v)
      }
    })


    //upyun获取并缓存到文件及回调返回数据,失败跳转错误页
    function _upyun(fun,v) {
      if (v) t.C('openCity from upyun');
      t.Ajax({}, function (res) {
        if (typeof (res.data.openCity) == 'object' && res.data.openCity.length > 0) {
          res.data.expire = new Date().getTime();
          var str = JSON.stringify(res.data)
          t.F(cPath, str, function () { });
          if (fun) fun(res.data);
          return
        } else {
          wx.redirectTo({
            url: '/pages/error/error?t=50003',
          })
        }
      }, upyunDomain + '/cache/openCity');
    }
  },
















  //===== 全局共享函数


  /*
    ### 缓存文式存储或获取数据
      参一：key   缓存名
      参二：val   缓存数据 string|array|object
      参三：type  缓存满时是否清除全部缓存  bool,默认false 不清除,true时清除

      示例：
        var res = t.S('a');
        var res = t.S('a','aaaaaa');
        var res = t.S('a','aaaaaa',1);
  */
  S(key, val, type) {
    if (arguments.length > 1) {   //存储
      var a = wx.getStorageInfoSync();
      //console.log(a);
      if (a.currentSize > a.limitSize - 100) {
        if (type) {
          wx.clearStorageSync();
        } else {
          return 'err';
        }
      }
      wx.setStorageSync(key, val);
      return 'ok';
    } else {                      //获取
      return wx.getStorageSync(key);
    }
  },




  /*
    ### 文件方式缓存或获取数据
      示例
        t.F('/g1/g2/g3.txt', 'aaaa2222', function (res) {
          t.C(res);
          t.F('/g1/g2/g3.txt',function(res2){
            t.C(res2);
          })
        })
  */
  F(path, data, fun) {
    var t = this
    var f = require('utils/files.js');
    if (arguments.length == 2) {  //获取
      f._reads(path, function (res) {
        if (data) data(res);
      })
    } else {                      //写入
      f._writes(path, data, function (res) {
        if (fun) fun(res);
      })
    }
  },



  /*
    ### 获取指定时间戳当天的零时的时间戳
    参一：int  时间戳
    return  int   返回转化后的零时时间戳
  */
  GetDateZeroTime(timestamp) {
    var tmp_time = new Date(timestamp);
    var year = tmp_time.getFullYear();
    var month = tmp_time.getMonth() + 1;
    var day = tmp_time.getDate();
    var time_str = year + "/" + month + "/" + day + " 00:00:00";
    return new Date(time_str).getTime();
  },





  /*
    ### 检测并替换字串中的特殊字符为实体字符 (' , " , > , < , / , \)
    ### 参一：源字串 
    ### 参二：是否反解析，默认空为特殊字符转实体
    ### return : 返回替换后的字串
    ### 示例：
      var content = $('textarea[name=content]').val().trim();
      content = ChangeChar(content);
      或
      ChangeChar(obj.info_title,1)
  */
  ChangeChar(val, stat) {
    if (stat) {
      var p1 = /&#60/g;
      val = val.replace(p1, "<");
      var p2 = /&#62/g;
      val = val.replace(p2, ">");
      var p2 = /&#39/g;
      val = val.replace(p2, "'");
      var p2 = /&#34/g;
      val = val.replace(p2, '"');
      var p2 = /&#47/g;
      val = val.replace(p2, "\/");
      var p2 = /&#92/g;
      val = val.replace(p2, "\\");
      var p2 = /&#59/g;
      val = val.replace(p2, ";");
      var p2 = /&#40/g;
      val = val.replace(p2, "(");
      var p2 = /&#41/g;
      val = val.replace(p2, ")");
      //var p2 = /&nbsp/g;
      //val = val.replace(p2, " ");
      return val;
    } else {
      var p1 = /</g;
      val = val.replace(p1, "&#60");
      var p2 = />/g;
      val = val.replace(p2, "&#62");
      var p2 = /'/g;
      val = val.replace(p2, "&#39");
      var p2 = /"/g;
      val = val.replace(p2, "&#34");
      var p2 = /\//g;
      val = val.replace(p2, "&#47");
      var p2 = /\\/g;
      val = val.replace(p2, "&#92");
      var p2 = /;/g;
      val = val.replace(p2, "&#59");
      var p2 = /\(/g;
      val = val.replace(p2, "&#40");
      var p2 = /\)/g;
      val = val.replace(p2, "&#41");
      //var p2 = / /g;
      //val = val.replace(p2, "&nbsp");
      return val;
    }
  },



  A(title, type) {
    if (!type) {
      type = 'success';
    } else {
      type = 'loading';
    }
    wx.showToast({
      title: title,
      icon: type
    })
  },







  /*
    ### 获取登陆用户信息
    
    <button type='primary' open-type='getUserInfo' bindgetuserinfo='Login'>用户登陆</button>
    Login(){
      app.GetUserInfo(function(res){
        app.C(res);
      })
    },
  */
  GetUserInfo(fun) {
    wx.login({
      success: function () {
        wx.getUserInfo({
          withCredentials: true,
          success: function (res) {
            if (fun) {
              fun(res)
            }
          },
          fail() {
            if (fun) {
              fun('false')
            }
          }
        })
      }
    })
  },







  /*
    ### 获取微信用户的openid

    Login(){
      app.getOpenid(function(res){
        app.C(res);
      })
    },
  */
  getOpenid(fun) {
    var t = this
    wx.login({
      success: function (res) {
        //调用后台服务器获取openid
        // t.C(res);
        // t.Ajax({code:res.code},function(res){
        //   t.C(res);
        // },'http://www.bm123.xyz/wx/get_openid_xcx.php')

        //本地获取openid
        var appid = 'wx59b656c24cc6c189'
        var secret = '36351f86780dc2d8555bed73b5173646'
        var ourl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + res.code + "&grant_type=authorization_code"
        if (res.code) {
          wx.request({
            url: ourl,
            success: function (res) {
              if (fun) {
                fun(res)
              }
            },
            fail: function () {
              if (fun) {
                fun('false')
              }
            }
          })
        }
      }
    })
  },



  V(info){
    var pages = getCurrentPages()
    var str = (info ? info : '') + ' --- ' + pages[0].route
    console.log(str);
  },

  C(r) {
    console.log(r);
  },

  //返回顶部
  backTop() {
    wx.pageScrollTo({
      scrollTop: 0
    })
  },






  /*
    ### wx.request 远程获取数据
    参一：object   请求时要传递的参数的json对象
    参二：function 成功的回调，返回服务处理后的数据及信息
    参三：string   要请求的url
    参四：string   请求方法 post 或 get 默认空为get
    参五：int      请求超时，默认 2000 (2秒)  
    示例：
      var url = 'http://a.shop.top/zindex/interface.php';
      t.Ajax({token:token},function(res,x){
        app.C(res);
      },url,'post',3000);
  */
  Ajax(data, fun, url, method, expire) {
    var header_date;
    expire = expire > 0 ? expire : 2000;
    var head_info = ''; //用来保存服务器返回的头信息
    var abort_stat = true;
    if (method == 'post' || method == 'POST') {
      var task = wx.request({
        url: url,
        method: 'post',
        header: {
          'content-type': 'application/x-www-form-urlencoded'
        },
        data: data,
        success(res) {
          abort_stat = false;
          fun(res, header_date);
        }
      })
    } else {
      var task = wx.request({
        url: url,
        data: data,
        success(res) {
          abort_stat = false;
          fun(res, header_date);
        }
      })
    }
    task.onHeadersReceived(function (task_res) {
      if (task_res.header.Date) {
        header_date = task_res.header.Date;
      }
      if (task_res.header.date) {
        header_date = task_res.header.date;
      }
    });
    var i1 = setTimeout(function () {
      if (abort_stat) {
        task.abort();
        fun('abort');
      }
    }, expire);
  },


  Ajax2(data,fun){
    var t = this;
    data.dbHost = t.globalData.currentCity.db_host;
    data.cityCode = t.globalData.currentCity.code;
    var a = Math.ceil(Math.random() * 99999)
    var b = a.toString();
    var c = b.length + b+ (a*3*5*7*9*11);
    data.token = c;
    t.Ajax(data, function (res, time) {
      if(fun)fun(res,time);
    }, t.globalData.currentDomain + t.globalData.default_RequestPath, 'post', 3000);
  },








  // globalData: {
  //   defaultImg: 'http://tp-shop-img.bm123.xyz/7.jpg',
  //   upyun_shop_img: upyun_shop_img,     //upyun缓存域名




  //   //页面控制台开关,是否显示指定JS页面的console.log()信息
  //   LoadingConsole: 0,   //loading.js 页面
  //   CityConsole:0,    //city.js 页面


  //   //已开通城市upyun缓存地址,本地缓存路径,过期时间的缓存路径
  //   OpenCityObj:'',   //保存容器
  //   OpenCityName: OpenCityName,
  //   OpenCity_url: upyun_shop_cache + '/CityInfo/' + OpenCityName+ '.html',
  //   OpenCity_path: system_path + OpenCityName,
  //   OpenCity_ExpirePath: system_path + OpenCityName + '_expire',

  //   //可用域名列表upyun缓存地址,本地缓存路径,过期时间的缓存路径
  //   DomainListObj:'',
  //   DomainListName: DomainListName,
  //   DomainList_url: upyun_shop_cache + '/DomainList/' + DomainListName + '.html',
  //   DomainList_path: system_path + DomainListName,
  //   DomainList_ExpirePath: system_path + DomainListName + '_expire',

  //   //商品分类upyun缓存地址,本地缓存路径,过期时间的缓存路径
  //   GoodsTypeObj:'',
  //   GoodsTypeName: GoodsTypeName,
  //   GoodsType_url: upyun_shop_cache + '/GoodsType/' + GoodsTypeName + '.html',
  //   GoodsType_path: system_path + GoodsTypeName,
  //   GoodsType_ExpirePath: system_path + GoodsTypeName + '_expire',

  //   //状态集合upyun缓存地址,本地缓存路径,过期时间的缓存路径
  //   StatusSetObj:'',
  //   StatusSetName: StatusSetName,
  //   StatusSet_url: upyun_shop_cache + '/Status/' + StatusSetName + '.html',
  //   StatusSet_path: system_path + StatusSetName,
  //   StatusSet_ExpirePath: system_path + StatusSetName + '_expire',
  //   StatusSet_ExpireLong:13000,    //定时更新的时长

  //   CurrentCityObj:"",             //当前选择的城市信息
  //   CurrentCity_path: system_path + 'CurrentCity',

  //   upyun_shop_cache: upyun_shop_cache, //upyun数据缓存域名 
  //   data_path: wx_path + '/Dir_Data/',   //微信文件存储目录路径
  //   system_path: system_path,   //微信文件存储目录路径
  //   default_img: '../../image/base.png',  //默认图片
  //   openid_info:'',        //当前用户信息
  //   openid_info_path: openid_info_path,



  //   userInfo: null,
  //   UserInfoPath: wx.env.USER_DATA_PATH + '/UserInfo',  //保存用户信息文件的路径
  //   token:123,
  //   expire:15000,
  //   goods_detail_imgs:[],   //商品详情中图片列表容器
  //   Store_GoodsList:[],   //商户下的商品列表容器
  //   CollectData:[],       //我的收藏总数据容器
  // },



//===== 项目专有函数


  /*
    ### 根据id及版本判断并获取商户或商品的最新详情
    参一： id  int  商户或商品id
    参二： utag1  int  商品或商户最新的版本号
    参三： fun  回调函数
    参四： sg_type  bool   获取的类型,默认false为商户，有值为商品
    参五： view  bool 是否打印出每步提示信息,默认空为不显示，有值为显示
    注：   函数不再返回数据，而是直接传入t 对象 ，并setData， 页面必须设置 store_detail 变量用来存在商户信息
    示例：
      app.GetStoreOrGoodsDetail(store_id,utag1,t,function (res) {
        ...
      },1）
    使用说明 ：
      获取的商品或商户列表里附带最新版本号，查看指定详情时使用该最新版本号与详情缓存数据中的版本比对，不一致说明有更新，则向upyun或后台重新获取详情数据
  
  
  
      app.GetStoreOrGoodsDetail(store_id, utag1, t, function (storeDetail) {})
      app.GetStoreOrGoodsDetail(store_id,'none', t, function (storeDetail) {})
  */
  // GetStoreOrGoodsDetail(id, utag1,fun,sg_type,view) {
  //   var t = this;
  //   if (!id) {
  //     return;
  //   }
  //   var f = require('utils/files.js');
  //   if (!sg_type) {      //商户
  //     var pre = 'ds_';
  //     var uri = '/detail_store/';
  //     var type = 'StoreDetail';
  //     var utag1_index = 8;
  //   } else {             //商品
  //     var pre = 'dg_';
  //     var uri = '/detail_goods/';
  //     var type = 'GoodsDetail';
  //     var utag1_index = 7;
  //   }
  //   if (view) t.C(type);
  //   var cache_name = pre + t.globalData.CurrentCityObj.code + '_' + id;
  //   var cache_path = t.globalData.data_path + cache_name;
  //   var cache_uri = uri + cache_name;
  //   var cache_url = t.globalData.upyun_shop_cache + cache_uri + '.html?a=' + Math.random();
  //   var cache_url_utag1 = t.globalData.upyun_shop_cache + cache_uri + '_utag1.html?a=' + Math.random();

  //   var data_expire = 20000;   //设置数据的过期时长

  //   f.Has(cache_path, function (s1) {
  //     if (s1 == 'ok') {                                 //A：有文件缓存
  //       if(view) t.C('1 : has file cache');
  //       f.Reads(cache_path, function (res_file) {
  //         if (/^{"expire".*}$/.test(res_file)) {              //B：数据格式正常
  //           if(view) t.C('2 : file cache format is ok');
  //           var res_file2 = JSON.parse(res_file);
  //           if(utag1 == 'none'){                        //D：不带版本号
  //             if(view) t.C('3 : utag1 is none');
  //             if(res_file2.expire > new Date().getTime()){  //未过有效期
  //               if(view) t.C('5 : expire is valid , file is ok');
  //               fun(res_file2.data);
  //             }else{                                        //已过有效期
  //               if(view) t.C('5 : expire is invalid');
  //               t.Ajax({}, function (upyun_utag1_res) {      //向upyun请求utag1版本号,并和本地utag1比对
  //                 if (/^none$|^[0-9]+$/.test(upyun_utag1_res.data)){  //E：upyun版本号正常
  //                   if(view) t.C('6 : utag1 from upyun is ok ');
  //                   //比对本地和upyun的utag1
  //                   if (upyun_utag1_res.data == res_file2.data[utag1_index]){    //F：upyun的utag1和本地的一致
  //                     if(view) t.C('7 : utag1 is same , file is ok');
  //                     fun(res_file2.data);
  //                     res_file2.expire = new Date().getTime() + data_expire;
  //                     f.Writes(cache_path, JSON.stringify(res_file2));
  //                   } else {                                                //F：upyun的utag1和本地的不一致
  //                     if(view) t.C('7 : utag1 is not same , file is err');
  //                     Upyun2(function (upyun_res) { fun(upyun_res)});
  //                   }
  //                 } else {                                            //E：upyun版本号异常,后台直接获取
  //                   if(view) t.C('6 : utag1 from upyun is err ');
  //                   Upyun2(function (upyun_res) { fun(upyun_res) },1);
  //                 }
  //               }, cache_url_utag1);
  //             }
  //           } else {                                    //D：附带版本号
  //             if(view) t.C('3 : utag1 is not none');
  //             if (res_file2.data[utag1_index] == utag1) {      //C：版本有效
  //               if(view) t.C('4 : utag1 is same , file is ok');
  //               fun(res_file2.data);
  //             } else {                                    //C：版本过期
  //               if(view) t.C('4 : utag1 is not same , file is bad');
  //                 Upyun2(function (upyun_res) { fun(upyun_res) });
  //             }
  //           }
  //         } else {                                      //B：数据格式异常
  //           if(view) t.C('2 : file cache format is err');
  //           Upyun2(function (upyun_res) { fun(upyun_res)});
  //         }
  //       });
  //     } else {                                          //A：无文件缓存
  //       if(view) t.C('1 : no file cache');
  //       Upyun2(function (upyun_res) { fun(upyun_res)});
  //     }
  //   });

  //   function Upyun2(fun,after_type) {
  //     Upyun(function (res) {
  //       var obj = {};
  //       obj.expire = new Date().getTime() + data_expire;
  //       if (typeof res == 'object' && res.length > 1) {
  //         if (!sg_type) {      //商户
  //           var img_index = 7;
  //         } else {             //商品
  //           var img_index = 2;
  //         }

  //         //图片的处理
  //         if(res[img_index]){
  //           if (!/^http.*/.test(res[img_index])){
  //             res[img_index] = upyun_shop_img + res[img_index];
  //           }
  //         }else{
  //           res[img_index] = default_img;
  //         }

  //         obj.data = res;
  //       }else{
  //         obj.data = [];
  //       }
  //       f.Writes(cache_path, JSON.stringify(obj),function(s){});
  //       fun(obj.data);
  //     }, after_type)
  //   }


  //   function Upyun(fun,after_type) {  //after_type  true 直接向后台请求 ,
  //     if(after_type){
  //         After(function (res_after) { fun(res_after); });
  //         return;
  //     }
  //     t.Ajax({}, function (res_upyun) {
  //       if (utag1 != 'none' && utag1 != res_upyun.data[utag1_index]){ //如果utag1与upyun的utag1不一致则后台请求
  //         After(function (res_after) { fun(res_after); });
  //       }
  //       if (typeof res_upyun.data == 'object') {    //A：upyun缓存存在
  //         if(view) t.C('8 ：upyun is ok');
  //         fun(res_upyun.data);
  //       } else {                                    //A：upyun缓存不存在
  //         After(function (res_after) { fun(res_after); });
  //       }
  //     }, cache_url); //后台获取数据
  //   }

  //   function After(fun) {
  //     var data = {
  //       type: 'Get' + type,
  //       cache_name: cache_uri,
  //     }
  //     if (!sg_type) {      //商户
  //       data.store_id = id;
  //     } else {
  //       data.goods_id = id;
  //     }
  //     t.Ajax2(data, function (res_after) {
  //       if (view) t.C('9 ：after is ok');
  //       fun(res_after.data);
  //     });
  //   }
    
    




    
    




    // if (!id) {
    //   return;
    // }
    // var t = this;
    // var f = require('utils/files.js');
    // if(!sg_type){      //商户
    //   var pre = 'ds_';
    //   var uri = '/detail_store/';
    //   var type = 'StoreDetail';
    //   var utag1_index = 8;
    // }else{             //商品
    //   var pre = 'dg_';
    //   var uri = '/detail_goods/';
    //   var type = 'GoodsDetail';
    //   var utag1_index = 7;
    // }
    // var cache_name = pre + t.globalData.CurrentCityObj.code + '_' + id;
    // var cache_uri = uri + cache_name;
    // var cache_url = t.globalData.upyun_shop_cache + cache_uri + '.html?a='+Math.random();
    // var cache_path = t.globalData.data_path + cache_name;
    // f.Has(cache_path, function (s1) {
    //   if (s1 == 'ok') {
    //     f.Reads(cache_path, function (res_file) {
    //       if (/^\[.*\]$/.test(res_file)) {
    //         var res_file2 = JSON.parse(res_file);
    //         SetData(id, res_file2);
    //         if (res_file2[utag1_index] == utag1){    //版本有效
    //           if (view) t.C(type + ' file is ok');
    //           fun();
    //         }else{                        //版本过期
    //           if(view) t.C(type + ' file is fail');
    //           Upyun2(function (upyun_res) { fun(upyun_res)});
    //         }
    //       } else {
    //         Upyun2(function (upyun_res) { fun(upyun_res)});
    //       }
    //     });
    //   } else {
    //     Upyun2(function(){fun();});
    //   }
    // });

    // function SetData(id,res_data){
    //   if (!sg_type) {      //商户
    //     res_data[7] = res_data[7] && !/^http.*/.test(res_data[7]) ? t.globalData.upyun_shop_img + res_data[7] : t.globalData.default_img;
    //     obj.setData({
    //       store_detail: res_data,
    //       store_id:id
    //     });
    //   }else{
    //     res_data[2] = res_data[2] && !/^http.*/.test(res_data[7]) ? t.globalData.upyun_shop_img + res_data[2]:t.globalData.default_img;
    //     obj.setData({
    //       goods_detail: res_data,
    //       goods_id: id
    //     });
    //   }
    // }

    // function Upyun2(fun){
    //   Upyun(function (res) {
    //     if (typeof res == 'object' && res.length > 1) {
    //       f.Writes(cache_path,JSON.stringify(res),function(){
    //         SetData(id, res);
    //       });
    //     }
    //     fun();
    //   })
    // }

    // function Upyun(fun) {
    //   t.Ajax({}, function (res_upyun) {
    //     if (typeof res_upyun.data == 'object' && res_upyun.data.length > 1) {
    //       var tmp_data = res_upyun.data;
    //       if (tmp_data && tmp_data[utag1_index] == utag1) {  //版本有效
    //         if (view) t.C(type + ' upyun is ok');
    //         fun(res_upyun.data);
    //       } else {                     //版本过期
    //         if(view) t.C(type + ' upyun is fail');
    //         After(function (res_after) { fun(res_after); });
    //       }
    //     }else{
    //       After(function (res_after) {fun(res_after);});
    //     }
    //   }, cache_url); //后台获取数据
    // }

    // function After(fun) {
    //   //限制同一后台请求，短时频繁操作
    //   var sess_name = type + '_' + t.globalData.CurrentCityObj.code + '_' + id;
    //   if (!wx.getStorageSync(sess_name)){
    //     wx.setStorageSync(sess_name,new Date().getTime());
    //   }else{
    //     if (parseInt(wx.getStorageSync(sess_name)) + 3600 > new Date().getTime()){
    //       if (view) t.C(type + ' after is too many');
    //       fun('err');
    //       return;
    //     }else{
    //     }
    //   }

    //   var data = {
    //     type: 'Get'+type,
    //     cache_name: cache_uri,
    //   }
    //   if (!sg_type) {      //商户
    //     data.store_id = id;
    //   } else {
    //     data.goods_id = id;
    //   }
    //   t.Ajax2(data, function (res_after) {
    //     //t.C(res_after);
    //     if (typeof res_after.data == 'object' && res_after.data.length > 1){
    //       if(view) t.C(type + ' after is ok');
    //       fun(res_after.data );
    //     }else{
    //       if(view) t.C(type + ' after is fail');
    //       fun('err');
    //     }
    //   });
    // }
  //},





  //域名列表中随机出一个域名
  // GetDomainForOne() {
  //   var t = this;
  //   if (!wx.getStorageSync('DomainListTmp')) {
  //     wx.setStorageSync('DomainListTmp', t.globalData.DomainListObj);
  //   }
  //   var list = wx.getStorageSync('DomainListTmp');
  //   var index = Math.floor(Math.random() * list.length);
  //   var domain = list.splice(index, 1)[0];
  //   if (list.length < 1) {
  //     wx.setStorageSync('DomainListTmp', '');
  //   } else {
  //     wx.setStorageSync('DomainListTmp', list);
  //   }
  //   if (/^http:.*/.test(domain)) {
  //     return domain + '/zindex/interface.php';
  //   } else {
  //     return 'err';
  //   }
  // },


  /*
    ### 附带错误码跳转到错误页面
    参一：int 错误代号
    示例：
  */
  // JumpError(code, url) {
  //   if (!url) {
  //     url = '../error/error';
  //   }
  //   var code = code ? code : 0;
  //   wx.redirectTo({
  //     url: url + '?t=' + code,
  //   })
  // },













//生成远程访问token 
// GenerateRemoteToken() {
//   var r1 = Math.floor(new Date().getTime() / 1000);
//   var r2 = 10 + Math.ceil(Math.random() * 9);
//   var r3 = r1 * r2;
//   var r4 = r1 * 2;
//   var r5 = '' + r3 + r2 + r4;
//   return r5;
// },









//去除缓存数据中的Gets()
// TrimGets(res){
//   var start = res.indexOf('(') + 1;
//   var end = res.lastIndexOf(')');
//   return res.substring(start, end);
// },


})